home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / var / lib / python-support / python2.6 / orca / bookmarks.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-04-20  |  7.3 KB  |  225 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. '''Provides the default implementation for bookmarks in Orca.'''
  5. import pickle
  6. import os
  7. import speech
  8. import settings
  9. import orca_state
  10. from orca_i18n import _
  11.  
  12. class Bookmarks:
  13.     '''Represents a default bookmark handler.'''
  14.     
  15.     def __init__(self, script):
  16.         self._script = script
  17.         self._bookmarks = { }
  18.         self._saveObservers = []
  19.         self._loadObservers = []
  20.         self._loadBookmarks()
  21.         self._currentbookmarkindex = None
  22.  
  23.     
  24.     def addSaveObserver(self, observer):
  25.         self._saveObservers.append(observer)
  26.  
  27.     
  28.     def addLoadObserver(self, observer):
  29.         self._loadObservers.append(observer)
  30.  
  31.     
  32.     def goToBookmark(self, inputEvent, index = None):
  33.         ''' Go to the bookmark indexed by inputEvent.hw_code '''
  34.         if not index:
  35.             pass
  36.         index = inputEvent.hw_code
  37.         
  38.         try:
  39.             context = self._script.getFlatReviewContext()
  40.             context_info = self._bookmarks[index]
  41.             context.setCurrent(context_info['line'], context_info['zone'], context_info['word'], context_info['char'])
  42.             self._bookmarks[index] = context_info
  43.         except KeyError:
  44.             self._script.systemBeep()
  45.             return None
  46.  
  47.         self._script.flatReviewContext = context
  48.         self._script.reviewCurrentItem(inputEvent)
  49.         self._currentbookmarkindex = index
  50.  
  51.     
  52.     def addBookmark(self, inputEvent):
  53.         ''' Add an in-page accessible object bookmark for this key. '''
  54.         context = self._script.getFlatReviewContext()
  55.         self._bookmarks[inputEvent.hw_code] = self._contextToBookmark(context)
  56.         utterances = [
  57.             _('bookmark entered')]
  58.         utterances.extend(self._script.speechGenerator.getSpeech(context.getCurrentAccessible(), False))
  59.         speech.speakUtterances(utterances)
  60.  
  61.     
  62.     def bookmarkCurrentWhereAmI(self, inputEvent):
  63.         ''' Report "Where am I" information for this bookmark relative to the 
  64.         current pointer location.'''
  65.         
  66.         try:
  67.             context = self._bookmarkToContext(self._bookmarks[inputEvent.hw_code])
  68.         except KeyError:
  69.             self._script.systemBeep()
  70.             return None
  71.  
  72.         obj = context.getCurrentAccessible()
  73.         cur_obj = orca_state.locusOfFocus
  74.         if self._script.isSameObject(cur_obj, obj):
  75.             speech.speak(_('bookmark is current object'))
  76.             return None
  77.         if self._script.isSameObject(cur_obj.parent, obj.parent):
  78.             speech.speak(_('bookmark and current object have same parent'))
  79.             return None
  80.         bookmark_ancestors = []
  81.         p = obj.parent
  82.         while p:
  83.             bookmark_ancestors.append(p)
  84.             p = p.parent
  85.             continue
  86.             self._script.isSameObject(cur_obj.parent, obj.parent)
  87.         p = cur_obj.parent
  88.         while p:
  89.             if bookmark_ancestors.count(p) > 0:
  90.                 speech.speak(_('shared ancestor %s') % p.role)
  91.                 return None
  92.             p = p.parent
  93.             continue
  94.             bookmark_ancestors.count(p) > 0
  95.         speech.speak(_('comparison unknown'))
  96.  
  97.     
  98.     def saveBookmarks(self, inputEvent):
  99.         ''' Save the bookmarks for this script. '''
  100.         
  101.         try:
  102.             self.saveBookmarksToDisk(self._bookmarks)
  103.             speech.speak(_('bookmarks saved'))
  104.         except IOError:
  105.             speech.speak(_('bookmarks could not be saved'))
  106.  
  107.         for o in self._saveObservers:
  108.             o()
  109.         
  110.  
  111.     
  112.     def goToNextBookmark(self, inputEvent):
  113.         ''' Go to the next bookmark location.  If no bookmark has yet to be
  114.         selected, the first bookmark will be used.  '''
  115.         hwkeys = self._bookmarks.keys()
  116.         hwkeys.sort()
  117.         if len(hwkeys) == 0:
  118.             self._script.systemBeep()
  119.             return None
  120.         if len(hwkeys) == 1 or self._currentbookmarkindex is None:
  121.             self.goToBookmark(None, index = hwkeys[0])
  122.             return None
  123.         
  124.         try:
  125.             index = hwkeys.index(self._currentbookmarkindex)
  126.             self.goToBookmark(None, index = hwkeys[index + 1])
  127.         except (ValueError, KeyError, IndexError):
  128.             self._currentbookmarkindex is None
  129.             self._currentbookmarkindex is None
  130.             len(hwkeys) == 0
  131.             self.goToBookmark(None, index = hwkeys[0])
  132.         except:
  133.             self._currentbookmarkindex is None
  134.  
  135.  
  136.     
  137.     def goToPrevBookmark(self, inputEvent):
  138.         hwkeys = self._bookmarks.keys()
  139.         hwkeys.sort()
  140.         if len(hwkeys) == 0:
  141.             self._script.systemBeep()
  142.             return None
  143.         if len(hwkeys) == 1 or self._currentbookmarkindex is None:
  144.             self.goToBookmark(None, index = hwkeys[0])
  145.             return None
  146.         
  147.         try:
  148.             index = hwkeys.index(self._currentbookmarkindex)
  149.             self.goToBookmark(None, index = hwkeys[index - 1])
  150.         except (ValueError, KeyError, IndexError):
  151.             self._currentbookmarkindex is None
  152.             self._currentbookmarkindex is None
  153.             len(hwkeys) == 0
  154.             self.goToBookmark(None, index = hwkeys[0])
  155.         except:
  156.             self._currentbookmarkindex is None
  157.  
  158.  
  159.     
  160.     def _loadBookmarks(self):
  161.         ''' Load this scripts saved bookmarks.'''
  162.         if not self.readBookmarksFromDisk():
  163.             pass
  164.         self._bookmarks = { }
  165.         for o in self._loadObservers:
  166.             o()
  167.         
  168.  
  169.     
  170.     def readBookmarksFromDisk(self, filename = None):
  171.         ''' Read saved bookmarks from disk.  Currently an unpickled object
  172.         that represents a bookmark '''
  173.         if not filename:
  174.             pass
  175.         filename = self._script.name.split(' ')[0]
  176.         orcaDir = settings.userPrefsDir
  177.         orcaBookmarksDir = os.path.join(orcaDir, 'bookmarks')
  178.         
  179.         try:
  180.             inputFile = open(os.path.join(orcaBookmarksDir, '%s.pkl' % filename), 'r')
  181.             bookmarks = pickle.load(inputFile)
  182.             inputFile.close()
  183.             return bookmarks
  184.         except (IOError, EOFError, OSError):
  185.             return None
  186.  
  187.  
  188.     
  189.     def saveBookmarksToDisk(self, bookmarksObj, filename = None):
  190.         ''' Write bookmarks to disk.  bookmarksObj must be a pickleable 
  191.         object. '''
  192.         if not filename:
  193.             pass
  194.         filename = self._script.name.split(' ')[0]
  195.         orcaDir = settings.userPrefsDir
  196.         orcaBookmarksDir = os.path.join(orcaDir, 'bookmarks')
  197.         
  198.         try:
  199.             os.stat(orcaBookmarksDir)
  200.         except OSError:
  201.             os.mkdir(orcaBookmarksDir)
  202.  
  203.         output = open(os.path.join(orcaBookmarksDir, '%s.pkl' % filename), 'w', os.O_CREAT)
  204.         pickle.dump(bookmarksObj, output)
  205.         output.close()
  206.  
  207.     
  208.     def _contextToBookmark(self, context):
  209.         '''Converts a flat_review.Context object into a bookmark.'''
  210.         context_info = { }
  211.         context_info['zone'] = context.zoneIndex
  212.         context_info['char'] = context.charIndex
  213.         context_info['word'] = context.wordIndex
  214.         context_info['line'] = context.lineIndex
  215.         return context_info
  216.  
  217.     
  218.     def _bookmarkToContext(self, bookmark):
  219.         '''Converts a bookmark into a flat_review.Context object.'''
  220.         context = self._script.getFlatReviewContext()
  221.         context.setCurrent(bookmark['line'], bookmark['zone'], bookmark['word'], bookmark['char'])
  222.         return context
  223.  
  224.  
  225.